#pragma once

class Noncopyable
{
private:
	Noncopyable( const Noncopyable& ); // construct by copy
	Noncopyable& operator=( const Noncopyable& ); // construct by assign operation
	Noncopyable( Noncopyable&& ); // copy constructor by moving
	Noncopyable& operator=( Noncopyable&& ); // assign operator constructor by moving

protected:
	virtual ~Noncopyable(void); // Best practice for base class destructor -- <<Exceptional style C++>>
	Noncopyable(void); // Against creating itself directly
};

// References:
// http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-835T
